package ru.averta.notes.domain.ajax;

import ru.averta.notes.domain.virtual.TagsCombination;

import java.util.LinkedList;
import java.util.List;

/**
 * <code>AjaxTagsSuggestAnswer</code>
 *
 * Ответ на запрос по тегам.
 * Функционал подсказки тегов подробно описан - http://fedotxxl.comindwork.com/web2.aspx/MP/WIKI#ALL:-API_tags_suggest
 *
 * Ответ состоит из комбинаций тегов ([search + job : 12]).
 * Комбинация включает в себя:
 * 1. Набор тегов
 * 2. Количество сайтов с данным набором тегов
 * 3. (если были исправления) отклоненения от уже набранного пользователем списка тегов
 * в формате 0001000 (третья буква изменена)
 *
 * @author fedor.belov (fedor.belov@mail.ru)
 *         Date: 13.09.11 17:53
 */
public class AjaxTagsSuggestAnswer {

    /** список возвращаемых комбинаций */
    private List<AjaxTagsCombination> combinations = new LinkedList<AjaxTagsCombination>();

    public AjaxTagsSuggestAnswer() {
    }

    public AjaxTagsSuggestAnswer(List<TagsCombination> combs) {
        for (TagsCombination comb : combs) combinations.add(comb.getAjaxObject());
    }

    public void addCombination(AjaxTagsCombination combination) {
        combinations.add(combination);
    }

    /**
     * Проверяет наличие такой комбинации в коллекции
     * Если комбинация есть, то увечиливает счетчик
     * Если комбинации нет, то добавляет
     *
     * @param comb
     */
    public void addCombinationAndRecount(AjaxTagsCombination comb) {

        for (AjaxTagsCombination combination : combinations) {
            if (comb.getTags().equals(combination.getTags()) &&
                    comb.getChanged().equals(combination.getChanged())) {
                combination.increaseCount();
                return;
            }
        }

        combinations.add(comb);
    }

    /** GETTER'ы для клиента */
    public List<AjaxTagsCombination> getCombinations() {
        return combinations;
    }

}
